From cf3830704bb7b5760c0e28fc251e442772a9cb3f Mon Sep 17 00:00:00 2001 From: Benjamin Otte Date: Fri, 17 Sep 2021 18:51:59 +0200 Subject: [PATCH] icontheme: Fix variable mixup leading to crashes Note: Don't have 2 variables named "icon" and "gicon", you will screw them up. reftests included. Fixes #4269 --- gtk/gtkicontheme.c | 28 +++++++++++++------------- testsuite/reftests/meson.build | 4 ++++ testsuite/reftests/pixbuf-icon.ref.ui | 13 ++++++++++++ testsuite/reftests/pixbuf-icon.ui | 16 +++++++++++++++ testsuite/reftests/texture-icon.ref.ui | 13 ++++++++++++ testsuite/reftests/texture-icon.ui | 16 +++++++++++++++ 6 files changed, 76 insertions(+), 14 deletions(-) create mode 100644 testsuite/reftests/pixbuf-icon.ref.ui create mode 100644 testsuite/reftests/pixbuf-icon.ui create mode 100644 testsuite/reftests/texture-icon.ref.ui create mode 100644 testsuite/reftests/texture-icon.ui diff --git a/gtk/gtkicontheme.c b/gtk/gtkicontheme.c index 1c2d83125c..154c9d8794 100644 --- a/gtk/gtkicontheme.c +++ b/gtk/gtkicontheme.c @@ -4109,7 +4109,7 @@ gtk_icon_theme_lookup_by_gicon (GtkIconTheme *self, GtkTextDirection direction, GtkIconLookupFlags flags) { - GtkIconPaintable *icon = NULL; + GtkIconPaintable *paintable = NULL; g_return_val_if_fail (GTK_IS_ICON_THEME (self), NULL); g_return_val_if_fail (G_IS_ICON (gicon), NULL); @@ -4123,42 +4123,42 @@ gtk_icon_theme_lookup_by_gicon (GtkIconTheme *self, if (GDK_IS_TEXTURE (gicon)) { - icon = icon_paintable_new (NULL, size, scale); - icon->texture = g_object_ref (GDK_TEXTURE (icon)); + paintable = icon_paintable_new (NULL, size, scale); + paintable->texture = g_object_ref (GDK_TEXTURE (gicon)); } else if (GDK_IS_PIXBUF (gicon)) { - icon = icon_paintable_new (NULL, size, scale); - icon->texture = gdk_texture_new_for_pixbuf (GDK_PIXBUF (icon)); + paintable = icon_paintable_new (NULL, size, scale); + paintable->texture = gdk_texture_new_for_pixbuf (GDK_PIXBUF (gicon)); } else if (G_IS_FILE_ICON (gicon)) { GFile *file = g_file_icon_get_file (G_FILE_ICON (gicon)); - icon = gtk_icon_paintable_new_for_file (file, size, scale); + paintable = gtk_icon_paintable_new_for_file (file, size, scale); } else if (G_IS_LOADABLE_ICON (gicon)) { - icon = icon_paintable_new (NULL, size, scale); - icon->loadable = G_LOADABLE_ICON (g_object_ref (gicon)); - icon->is_svg = FALSE; + paintable = icon_paintable_new (NULL, size, scale); + paintable->loadable = G_LOADABLE_ICON (g_object_ref (gicon)); + paintable->is_svg = FALSE; } else if (G_IS_THEMED_ICON (gicon)) { const char **names; names = (const char **) g_themed_icon_get_names (G_THEMED_ICON (gicon)); - icon = gtk_icon_theme_lookup_icon (self, names[0], &names[1], size, scale, direction, flags); + paintable = gtk_icon_theme_lookup_icon (self, names[0], &names[1], size, scale, direction, flags); } else { g_debug ("Unhandled GIcon type %s", G_OBJECT_TYPE_NAME (gicon)); - icon = icon_paintable_new ("image-missing", size, scale); - icon->filename = g_strdup (IMAGE_MISSING_RESOURCE_PATH); - icon->is_resource = TRUE; + paintable = icon_paintable_new ("image-missing", size, scale); + paintable->filename = g_strdup (IMAGE_MISSING_RESOURCE_PATH); + paintable->is_resource = TRUE; } - return icon; + return paintable; } /** diff --git a/testsuite/reftests/meson.build b/testsuite/reftests/meson.build index a7c295137e..5e4d5d08d7 100644 --- a/testsuite/reftests/meson.build +++ b/testsuite/reftests/meson.build @@ -370,6 +370,8 @@ testdata = [ 'partial-rounded-border.ui', 'picture-load-invalid-file.ui', 'picture-load-invalid-file.ref.ui', + 'pixbuf-icon.ref.ui', + 'pixbuf-icon.ui', 'pseudoclass-on-box.css', 'pseudoclass-on-box.ref.ui', 'pseudoclass-on-box.ui', @@ -423,6 +425,8 @@ testdata = [ 'symbolic-icon-translucent-color.css', 'symbolic-icon-translucent-color.ref.ui', 'symbolic-icon-translucent-color.ui', + 'texture-icon.ref.ui', + 'texture-icon.ui', 'textview-border-windows.css', 'textview-border-windows.ref.ui', 'textview-border-windows.ui', diff --git a/testsuite/reftests/pixbuf-icon.ref.ui b/testsuite/reftests/pixbuf-icon.ref.ui new file mode 100644 index 0000000000..5120db1573 --- /dev/null +++ b/testsuite/reftests/pixbuf-icon.ref.ui @@ -0,0 +1,13 @@ + + + + 10 + 10 + 0 + + + resource:///org/gtk/libgtk/icons/16x16/status/image-missing.png + + + + diff --git a/testsuite/reftests/pixbuf-icon.ui b/testsuite/reftests/pixbuf-icon.ui new file mode 100644 index 0000000000..86938256f8 --- /dev/null +++ b/testsuite/reftests/pixbuf-icon.ui @@ -0,0 +1,16 @@ + + + + resource:///org/gtk/libgtk/icons/16x16/status/image-missing.png + + + 10 + 10 + 0 + + + + + + + diff --git a/testsuite/reftests/texture-icon.ref.ui b/testsuite/reftests/texture-icon.ref.ui new file mode 100644 index 0000000000..5120db1573 --- /dev/null +++ b/testsuite/reftests/texture-icon.ref.ui @@ -0,0 +1,13 @@ + + + + 10 + 10 + 0 + + + resource:///org/gtk/libgtk/icons/16x16/status/image-missing.png + + + + diff --git a/testsuite/reftests/texture-icon.ui b/testsuite/reftests/texture-icon.ui new file mode 100644 index 0000000000..99c6b9609f --- /dev/null +++ b/testsuite/reftests/texture-icon.ui @@ -0,0 +1,16 @@ + + + + resource:///org/gtk/libgtk/icons/16x16/status/image-missing.png + + + 10 + 10 + 0 + + + + + + + -- 2.30.2